summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNarr the Reg <juangerman-13@hotmail.com>2023-02-10 02:38:03 +0100
committerNarr the Reg <juangerman-13@hotmail.com>2023-02-10 02:38:03 +0100
commit7c0dcea96cef421b6f670cdc5e7b1b3ed63bf939 (patch)
tree5d0f35f4bf0978168cfb6c17c0c05673d09330e2
parentMerge pull request #9749 from ameerj/pr9559-partial-revert (diff)
downloadyuzu-7c0dcea96cef421b6f670cdc5e7b1b3ed63bf939.tar
yuzu-7c0dcea96cef421b6f670cdc5e7b1b3ed63bf939.tar.gz
yuzu-7c0dcea96cef421b6f670cdc5e7b1b3ed63bf939.tar.bz2
yuzu-7c0dcea96cef421b6f670cdc5e7b1b3ed63bf939.tar.lz
yuzu-7c0dcea96cef421b6f670cdc5e7b1b3ed63bf939.tar.xz
yuzu-7c0dcea96cef421b6f670cdc5e7b1b3ed63bf939.tar.zst
yuzu-7c0dcea96cef421b6f670cdc5e7b1b3ed63bf939.zip
-rw-r--r--src/audio_core/sink/cubeb_sink.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/audio_core/sink/cubeb_sink.cpp b/src/audio_core/sink/cubeb_sink.cpp
index 32c1b1cb3..9133f5388 100644
--- a/src/audio_core/sink/cubeb_sink.cpp
+++ b/src/audio_core/sink/cubeb_sink.cpp
@@ -302,11 +302,21 @@ std::vector<std::string> ListCubebSinkDevices(bool capture) {
std::vector<std::string> device_list;
cubeb* ctx;
+#ifdef _WIN32
+ auto com_init_result = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
+#endif
+
if (cubeb_init(&ctx, "yuzu Device Enumerator", nullptr) != CUBEB_OK) {
LOG_CRITICAL(Audio_Sink, "cubeb_init failed");
return {};
}
+#ifdef _WIN32
+ if (SUCCEEDED(com_init_result)) {
+ CoUninitialize();
+ }
+#endif
+
auto type{capture ? CUBEB_DEVICE_TYPE_INPUT : CUBEB_DEVICE_TYPE_OUTPUT};
cubeb_device_collection collection;
if (cubeb_enumerate_devices(ctx, type, &collection) != CUBEB_OK) {
@@ -329,12 +339,22 @@ std::vector<std::string> ListCubebSinkDevices(bool capture) {
u32 GetCubebLatency() {
cubeb* ctx;
+#ifdef _WIN32
+ auto com_init_result = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
+#endif
+
if (cubeb_init(&ctx, "yuzu Latency Getter", nullptr) != CUBEB_OK) {
LOG_CRITICAL(Audio_Sink, "cubeb_init failed");
// Return a large latency so we choose SDL instead.
return 10000u;
}
+#ifdef _WIN32
+ if (SUCCEEDED(com_init_result)) {
+ CoUninitialize();
+ }
+#endif
+
cubeb_stream_params params{};
params.rate = TargetSampleRate;
params.channels = 2;